﻿using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using Zvezda.FSO2.DB;

namespace FSO
{
    public partial class UserControlSearchPrUnitForInvoiceOut : UserControl, InterfaceSearchControl
    {
        //показывает, что не было ни одной попытки заполнить датасет
        private bool _isNotFill = true;
        private bool _openOnDblClick = false;
        private int _pid = -1;

        public UserControlSearchPrUnitForInvoiceOut(int? pid)
        {
            InitializeComponent();
            if (pid.HasValue)
            {
                _pid = pid.Value;
            }
            radGridViewList.MultiSelect = true;
            //RefreshList();
        }

		public UserControlSearchPrUnitForInvoiceOut()
            : this(null)
        {
        }

        public bool OpenOnDoubleClick
        {
            get
            {
                return _openOnDblClick;
            }
            set
            {
                _openOnDblClick = value;
            }
        }

        public bool EnableFiltering
        {
            get
            {
                return radGridViewList.EnableFiltering;
            }
            set
            {
                radGridViewList.EnableFiltering = value;
            }
        }

        public DataRow SelectedRow
        {
            get
            {
                DataSetFSO.VIEW_SEARCH_P_U_FOR_FORMSRow dr;
                DataRow returnRow;
                if (radGridViewList.SelectedRows.Count > 0)
                {
                    dr = (DataSetFSO.VIEW_SEARCH_P_U_FOR_FORMSRow)(((DataRowView)(radGridViewList.SelectedRows.First()).DataBoundItem)).Row;
                    returnRow = producT_UNITTableAdapter1.GetDataByID(dr.ID).FindByID(dr.ID);
                }
                else
                {
                    returnRow = null;
                }
                return returnRow;
            }
        }

        public DataSet OwnerDataSet
        {
            set
            {
                dataSetFSO1 = (DataSetFSO)value;
                InitializeGridView();
            }
            get
            {
                return dataSetFSO1;
            }
        }

        public GridViewSelectedRowsCollection SelectedRows
        {
            get
            {
                return radGridViewList.SelectedRows;
            }
        }

        public void RefreshList()
        {
            if (_pid == -1)
            {
                vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.Fill(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS);
            }
            else
            {
                vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPID(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, _pid);
            }
        }

        private void InitializeGridView()
        {
            /*
             * Группировка будет производиться
             * Состояние -> Этап КП
             * Протокол согласование в цену входить не будет
             * 
             * 
             * 
             */
            //Наименование товара
            GridViewTextBoxColumn colPUName = new GridViewTextBoxColumn("PU_NAME", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.NAMEColumn.ColumnName);
            colPUName.HeaderText = "Наименование";

            //Состояние товара, по нему будем группировать
            GridViewTextBoxColumn colPUState = new GridViewTextBoxColumn("PU_STATE", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.NSI_PRODUCT_STATE_NAMEColumn.ColumnName);
            colPUState.HeaderText = "Состояние";

            //Цена товара
            GridViewDecimalColumn colPUCost = new GridViewDecimalColumn("PU_Cost", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.COSTColumn.ColumnName);
            colPUCost.HeaderText = "Цена";
            colPUCost.FormatString = "{0:N2}";

            //Валюта
            GridViewTextBoxColumn colCurrency = new GridViewTextBoxColumn("NSI_CURRENCY_NAME", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.NSI_CURRENCY_NAMEColumn.ColumnName);
            colCurrency.HeaderText = "Вал.";

            // % оплаты
            GridViewDecimalColumn colPUPerPay = new GridViewDecimalColumn("PU_PER_PAY", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.PAY_PERColumn.ColumnName);
            colPUPerPay.HeaderText = "% оплаты";
            colPUPerPay.FormatString = "{0:N2}%";

            //Сумма выставленных счетов на товар
            GridViewDecimalColumn colPUInvOutSum = new GridViewDecimalColumn("PU_INV_IN_SUM", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.INVOICE_IN_SUMColumn.ColumnName);
            colPUInvOutSum.HeaderText = "Выставлено счетов";
            colPUInvOutSum.FormatString = "{0:N2}";

            //№ и Название этапа Кп
            GridViewTextBoxColumn colCPStageName = new GridViewTextBoxColumn("CP_STAGE_NAME", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.CP_STAGE_NUMBERColumn.ColumnName);
            colCPStageName.HeaderText = "Этап";

            //Конец этапа
            GridViewDateTimeColumn colCPEndDate = new GridViewDateTimeColumn("CP_END_DATE", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.CP_STAGE_END_DATEColumn.ColumnName);
            colCPEndDate.HeaderText = "Отгрузка";
            colCPEndDate.FormatString = "{0:d}";

			//№ счет-фактуры
			GridViewTextBoxColumn colVatInvNum = new GridViewTextBoxColumn("CP_VAT_INV_NUM", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.VAT_INVOICE_NUMBERColumn.ColumnName);
			colVatInvNum.HeaderText = "№ счет-фактуры";
			colVatInvNum.ReadOnly = true;

			//№ счета
			GridViewTextBoxColumn colInvOutNum = new GridViewTextBoxColumn("PU_INVOICE_OUT_NUMBER", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.INVOICE_OUT_NUMBERColumn.ColumnName);
			colInvOutNum.HeaderText = "№ исх. счета";
			colInvOutNum.ReadOnly = true;

			//№ счет-фактуры
			//GridViewTextBoxColumn colInvOutNum = new GridViewTextBoxColumn("CP_INV_OUT_NUM", dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS.INVOICE_OUT_NUMBERColumn.ColumnName);
			//colInvOutNum.HeaderText = "№ исх. счета";
			//colInvOutNum.ReadOnly = true;

            radGridViewList.MasterTemplate.Columns.Clear();
            radGridViewList.MasterTemplate.Columns.Add(colPUName);
            radGridViewList.MasterTemplate.Columns.Add(colPUState);
            radGridViewList.MasterTemplate.Columns.Add(colPUCost);
            radGridViewList.MasterTemplate.Columns.Add(colCurrency);
            radGridViewList.MasterTemplate.Columns.Add(colPUPerPay);
            radGridViewList.MasterTemplate.Columns.Add(colPUInvOutSum);
            radGridViewList.MasterTemplate.Columns.Add(colCPStageName);
            radGridViewList.MasterTemplate.Columns.Add(colCPEndDate);
			radGridViewList.MasterTemplate.Columns.Add(colVatInvNum);
			radGridViewList.MasterTemplate.Columns.Add(colInvOutNum);
            radGridViewList.DataSource = dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS;

            //Группируем по состоянию
            radGridViewList.GroupDescriptors.Clear();
            radGridViewList.GroupDescriptors.Add(new GridGroupByExpression(colPUState));
            //radGridViewList.AutoExpandGroups = true;
            //radGridViewList.Ex
            //this.radGridViewDemo.GroupDescriptors.Add(new GridGroupByExpression("CustomerID Group By CustomerID"));

            //GroupDescriptor item = new GroupDescriptor(new GridGroupByExpression((GridViewDataColumn) colPUState));
        }

        private void UserControlSearchPrUnitByID_Load(object sender, EventArgs e)
        {
            if (_isNotFill)
            {
                RefreshList();
            }
            InitializeGridView();
        }

        /*
         * Заполнения датасета для формы входящего счета
         * заполняются только теми товарами и работами, цена на которые указана в той же валюте,
         * что и счет
         */
        public void FillGridByPidCurName(int pid, string curName)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPidCurName(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, pid, curName);
            _isNotFill = false;
        }

        /*
         * Заполнение для датасета для служебной записки
         * Заполняется только товарами( не работами!)
         * в состоянии "Заказан"
         */
        public void FillGridForDirect(int pid)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPidForDirect(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, pid);
            _isNotFill = false;
        }

        /*
         * Для цеховой накладной
         * заполняется только товарами (не работами!)
         * в состоянии "в производстве"
         */
        public void FillGridForGuildBill(int pid)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPidForGuildBill(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, pid);
            _isNotFill = false;
        }
        /*
         * Для счет-фактуры
         * Заполняется товарами в состоянии "На складе" и всеми работами
         */
        public void FillGridForVatInvoice(int pid)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPidForVatInvoice(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, pid);
            _isNotFill = false;
        }

        /*
         * Для счет-фактуры
         * Заполняется полностью оплаченными товарами в состоянии "На складе" и всеми работами
         */
        public void FillGridForVatInvoiceNotGLet(int pid)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillForVatInvIsGLet(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, pid);
            _isNotFill = false;
        }

        /*
         * Заполняется товарами определенного счета 
         * 
         */
        public void FillGridByInvoiceOutID(int invoiceOutId)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByInvOutID(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, invoiceOutId);
            _isNotFill = false;
        }

        /*
         * Заполняется товарами определенной счет-фактуры 
         * 
         */
        public void FillGridByVatInvoiceID(int vatInvoiceId)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByVatInvID(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, vatInvoiceId);
            _isNotFill = false;
        }

        /*
         * Заполняется товарами определенного платежа 
         * 
         */
        public void FillGridByPayInID(int PayInId)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPayInID(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, PayInId);
            _isNotFill = false;
        }
        /*
         * Заполняется товарами определенной счет-фактуры с ценой выставленной в конкретной валюте 
         * 
         */
        public void FillGridByVatInvoiceID(int vatInvoiceId, string curName)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByVatInvIdCurName(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, vatInvoiceId, curName);
            _isNotFill = false;
        }
        /*
        * Заполняется товарами определенного платежа с ценой выставленной в конкретной валюте 
        * 
        */
        public void FillGridByPayInID(int PayInId, string curName)
        {
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPayInIdCurName(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, PayInId, curName);
            _isNotFill = false;
        }
        /*
         * Заполняется товарами определенного счета для счет-фактуры
         * 
         */
        public void FillGridByInvoiceOutIDForVatInvoice(int invoiceOutId, bool isGLet)
        {
            decimal payPer = isGLet ? 0 : 100;
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByInvOutIdForVatInv(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, invoiceOutId, payPer);
            _isNotFill = false;
        }

        /*
         * Заполняется товарами определенного платежа для счет-фактуры
         * 
         */
        public void FillGridByPayInIDForVatInvoice(int PayInId, bool isGLet)
        {
            decimal payPer = isGLet ? 0 : 100;
            vieW_SEARCH_P_U_FOR_FORMSTableAdapter1.FillByPayInIDForVatInv(dataSetFSO1.VIEW_SEARCH_P_U_FOR_FORMS, PayInId, payPer);
            _isNotFill = false;
        }
    }
}
